lexer grammar EffectLexer;

//仿sql关键字
SELECT:'SELECT';
UPDATE:'UPDATE';
SET:'SET';
FROM:'FROM';
TO:'TO';
WHERE:'WHERE';
LIMIT:'LIMIT';
IF:'IF';
AS: 'AS';
//语法符号关键字
SEMICOLON: ';';
DOT: '.';
COMMA: ',';
LEFT_PAREN: '(';
RIGHT_PAREN: ')';
LEFT_BRACES: '{';
RIGHT_BRACES: '}';
COLON: ':';//用于赋值,区分set;where
PIPE: '|';//用于as连接
//逻辑运算符
EQ  : '=' | '==';
NEQ : '<>'|'!=';
LT  : '<';
LTE : '<=' | '!>';
GT  : '>';
GTE : '>=' | '!<';
//逻辑运算符连接符
OR: 'OR';
AND: 'AND';
//操作运算符
PLUS: '+';
MINUS: '-';
ASTERISK: '*';
SLASH: '/';
//自定义关键字
//DOWN:'DOWN';//数值对象小于自身
//UP:'UP';//数值对象大于自身
ID                  : [a-zA-Z]+                 //叶子对象
                    ;
OBJECT              : ID (DOT ID)+;             //树对象 :* 无意义,因为{0}等同ID,因为优先级会识别为 ID
OBJECTARRYS         : OBJECT (COMMA ID)+        //树对象组(叶子对象)
                    | OBJECT (COMMA OBJECT)+    //排列组合式候选项
                    | ID (COMMA ID)+            //树对象组
                    | ID (COMMA OBJECT)+;       //树对象组

INT                 : [0-9]+                    //数值/不存在小数/四舍五入
                    ;
STRING
    : '\'' ( ~('\''|'\\') | ('\\' .) )* '\''
    | '"' ( ~('"'|'\\') | ('\\' .) )* '"'
    | 'R\'' (~'\'')* '\''
    | 'R"'(~'"')* '"'
    ;
WS                  : [ \t\r\n]+ -> skip;
